package com.can;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import org.junit.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class EasyWriteTest {

    private List<DemoData> data(){
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setString("字符串"+i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }

    /**
     * write(fileName,格式类)
     * sheet(表名)
     * doWrite(数据)
     */
    //根据list 写入Excel
    @Test
    public void simpleWrite(){
        String fileName = "EasyExcel写法1.xlsx";
        String path ="D:\\练习项目idea(不可删)\\练习学习项目\\Excel\\EasyExcel\\";
        //写法1
        //这里 需要指定写用哪个 class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        //如果这里想使用03版 则传入excelType参数即可.
        EasyExcel.write(fileName,DemoData.class).excelType(ExcelTypeEnum.XLSX).sheet("工作表名称").doWrite(data());

        //写法2
        ExcelWriter excelWriter = EasyExcel.write(fileName,DemoData.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("工作表名称").build();
        excelWriter.write(data(),writeSheet);
        //千万别忘记finish 会帮忙关闭流
        excelWriter.finish();
    }


    /**
     * 读取操作
     */
    @Test
    public void simpleRead(){
        String fileName = "EasyExcel写法1.xlsx";
        String path ="D:\\练习项目idea(不可删)\\练习学习项目\\Excel\\EasyExcel\\";
        //写法1
        //这里 需要指定写用哪个 class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        //如果这里想使用03版 则传入excelType参数即可.
        EasyExcel.read(fileName,DemoData.class,new DemoDataListener()).sheet().doRead();

        System.out.println("==================================");
        //写法2
        ExcelReader excelReader = EasyExcel.read(fileName,DemoData.class,new DemoDataListener()).build();
        ReadSheet readSheet =  EasyExcel.readSheet(0).build();
        excelReader.read(readSheet);
        //千万别忘记finish 会帮忙关闭流
        excelReader.finish();

        //读多个sheet
        // 读取全部sheet
        // 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll();
        // 读取部分sheet
        ExcelReader excelReader1 = EasyExcel.read(fileName).build();
        // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
        ReadSheet readSheet1 =
                EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
        ReadSheet readSheet2 =
                EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
        // 这里注意 一定要把sheet1 sheet2 一起传进去，不然有个问题就是03版的excel 会读取多次，浪费性能
        excelReader1.read(readSheet1, readSheet2);
        // 这里千万别忘记关闭，读的时候会创建临时文件，到时磁盘会崩的
        excelReader1.finish();
    }
}
